home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / Oberon⁄F™ 1.2 / Preinstalled version / Mac / Mod / MemoryMgr / MemoryMgr (.txt)
Encoding:
Oberon Document  |  1996-04-07  |  14.9 KB  |  262 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Geneva
  16. Geneva
  17. Geneva
  18. Geneva
  19. MODULE MacMemoryMgr;
  20. IMPORT SYSTEM, MacTypes;
  21. CONST
  22.     maxSize* = 0800000H;    (*Max data block size is 8 megabytes*)
  23.     defaultPhysicalEntryCount* = 8;
  24. (* values returned from the GetPageState function *)
  25.     kPageInMemory* = 0;
  26.     kPageOnDisk* = 1;
  27.     kNotPaged* = 2;
  28. (* masks for Zone->heapType field *)
  29.     k32BitHeap* = 1;    (* valid in all Memory Managers *)
  30.     kNewStyleHeap* = 2;    (* true if new Heap Manager is present *)
  31.     kNewDebugHeap* = 4;    (* true if new Heap Manager is running in debug mode on this heap *)
  32. (* size of a block in bytes *)
  33.     Ptr* = MacTypes.Ptr;
  34.     Handle* = MacTypes.Handle;
  35.     Size* = LONGINT;
  36.     GrowZoneProcPtr* = MacTypes.ProcPtr;  (* FUNCTION GrowZone(cbNeeded: Size): LONGINT; *)
  37.     PurgeProcPtr* = MacTypes.ProcPtr;  (* PROCEDURE Purge(blockToPurge: Handle); *)
  38.     GrowZoneUPP* = MacTypes.UniversalProcPtr;
  39.     PurgeUPP* = MacTypes.UniversalProcPtr;
  40.     UserFnUPP* = MacTypes.UniversalProcPtr;
  41.     THz* =  POINTER TO Zone;
  42.     Zone* = RECORD
  43.         bkLim*: Ptr;
  44.         purgePtr*: Ptr;
  45.         hFstFree*: Ptr;
  46.         zcbFree*: LONGINT;
  47.         gzProc*: GrowZoneUPP;
  48.         moreMast*: INTEGER;
  49.         flags*: INTEGER;
  50.         cntRel*: INTEGER;
  51.         maxRel*: INTEGER;
  52.         cntNRel*: INTEGER;
  53.         heapType*: SHORTINT; (* Byte *)
  54.         unused*: SHORTINT; (* Byte *)
  55.         cntEmpty*: INTEGER;
  56.         cntHandles*: INTEGER;
  57.         minCBFree*: LONGINT;
  58.         purgeProc*: PurgeUPP;
  59.         sparePtr*: Ptr;
  60.         allocPtr*: Ptr;
  61.         heapData*: INTEGER;
  62.     END;
  63.     MemoryBlock* = RECORD
  64.         address*: Ptr;
  65.         count*: LONGINT;
  66.     END;
  67.     LogicalToPhysicalTable* = RECORD
  68.         logical*: MemoryBlock;
  69.         physical*: ARRAY [untagged] defaultPhysicalEntryCount OF MemoryBlock;
  70.     END;
  71.     PageState* = INTEGER;
  72.     StatusRegisterContents* = INTEGER;
  73. CONST
  74.     uppGrowZoneProcInfo* = 0000000F0H; (* PROCEDURE (4 byte param): 4 byte result; *)
  75.     uppPurgeProcInfo* = 0000000C0H; (* PROCEDURE (4 byte param); *)
  76.     uppUserFnProcInfo* = 000009802H; (* Register PROCEDURE (4 bytes in A0); *)
  77. PROCEDURE [code] NewGrowZoneProc*(userRoutine: GrowZoneProcPtr): GrowZoneUPP 02EH, 09FH;
  78. PROCEDURE [code] NewPurgeProc*(userRoutine: PurgeProcPtr): PurgeUPP 02EH, 09FH;
  79. PROCEDURE [code] CallGrowZoneProc*(cbNeeded: Size; userRoutine: GrowZoneUPP): LONGINT 020H, 05FH, 04EH, 090H;
  80. PROCEDURE [code] CallPurgeProc*(blockToPurge: Handle; userRoutine: PurgeUPP) 020H, 05FH, 04EH, 090H;
  81. PROCEDURE [code] GetApplLimit*(): Ptr  02EH, 0B8H, 001H, 030H;
  82. PROCEDURE [code] SystemZone*(): THz 02EH, 0B8H, 002H, 0A6H;
  83. PROCEDURE [code] ApplicationZone*(): THz 02EH, 0B8H, 002H, 0AAH;
  84. PROCEDURE [code] GZSaveHnd*(): Handle 02EH, 0B8H, 003H, 028H;
  85. PROCEDURE [code] TopMem*(): Ptr 02EH, 0B8H, 001H, 008H;
  86. PROCEDURE [code] MemError*(): MacTypes.OSErr 03EH, 0B8H, 002H, 020H;
  87. PROCEDURE [code] GetZone*(): THz 0A1H, 01AH, 02EH, 088H;
  88. PROCEDURE [code] NewHandle*(byteCount: Size): Handle 020H, 01FH, 0A1H, 022H, 02EH, 088H;
  89. PROCEDURE [code] NewHandleSys*(byteCount: Size): Handle 020H, 01FH, 0A5H, 022H, 02EH, 088H;
  90. PROCEDURE [code] NewHandleClear*(byteCount: Size): Handle 020H, 01FH, 0A3H, 022H, 02EH, 088H;
  91. PROCEDURE [code] NewHandleSysClear*(byteCount: Size): Handle 020H, 01FH, 0A7H, 022H, 02EH, 088H;
  92. PROCEDURE [code] HandleZone*(h: Handle): THz 020H, 05FH, 0A1H, 026H, 02EH, 088H;
  93. PROCEDURE [code] RecoverHandle*(p: Ptr): Handle 020H, 05FH, 0A1H, 028H, 02EH, 088H;
  94. PROCEDURE [code] RecoverHandleSys*(p: Ptr): Handle 020H, 05FH, 0A5H, 028H, 02EH, 088H;
  95. PROCEDURE [code] NewPtr*(byteCount: Size): Ptr 020H, 01FH, 0A1H, 01EH, 02EH, 088H;
  96. PROCEDURE [code] NewPtrSys*(byteCount: Size): Ptr 020H, 01FH, 0A5H, 01EH, 02EH, 088H;
  97. PROCEDURE [code] NewPtrClear*(byteCount: Size): Ptr 020H, 01FH, 0A3H, 01EH, 02EH, 088H;
  98. PROCEDURE [code] NewPtrSysClear*(byteCount: Size): Ptr 020H, 01FH, 0A7H, 01EH, 02EH, 088H;
  99. PROCEDURE [code] PtrZone*(p: Ptr): THz 020H, 05FH, 0A1H, 048H, 02EH, 088H;
  100. PROCEDURE [code] MaxBlock*(): LONGINT 0A0H, 061H, 02EH, 080H;
  101. PROCEDURE [code] MaxBlockSys*(): LONGINT 0A4H, 061H, 02EH, 080H;
  102. PROCEDURE [code] StackSpace*(): LONGINT 0A0H, 065H, 02EH, 080H;
  103. PROCEDURE [code] NewEmptyHandle*(): Handle 0A1H, 066H, 02EH, 088H;
  104. PROCEDURE [code] NewEmptyHandleSys*(): Handle 0A5H, 066H, 02EH, 088H;
  105. PROCEDURE [code] HLock*(h: Handle) 020H, 05FH, 0A0H, 029H;
  106. PROCEDURE [code] HUnlock*(h: Handle) 020H, 05FH, 0A0H, 02AH;
  107. PROCEDURE [code] HPurge*(h: Handle) 020H, 05FH, 0A0H, 049H;
  108. PROCEDURE [code] HNoPurge*(h: Handle) 020H, 05FH, 0A0H, 04AH;
  109. PROCEDURE [code] HLockHi*(h: Handle) 020H, 05FH, 0A0H, 064H, 0A0H, 029H;
  110. PROCEDURE [code] TempNewHandle*(logicalSize: Size; VAR resultCode: MacTypes.OSErr): Handle 03FH, 03CH, 000H, 01DH, 0A8H, 08FH;
  111. PROCEDURE [code] TempMaxMem*(VAR grow: Size): Size 03FH, 03CH, 000H, 015H, 0A8H, 08FH;
  112. PROCEDURE [code] TempFreeMem*(): LONGINT 03FH, 03CH, 000H, 018H, 0A8H, 08FH;
  113. (*  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  *)
  114. PROCEDURE [code] TempHLock*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 01EH, 0A8H, 08FH;
  115. PROCEDURE [code] TempHUnlock*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 01FH, 0A8H, 08FH;
  116. PROCEDURE [code] TempDisposeHandle*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 020H, 0A8H, 08FH;
  117. PROCEDURE [code] TempTopMem*(): Ptr 03FH, 03CH, 000H, 016H, 0A8H, 08FH;
  118. PROCEDURE [code] InitApplZone* 0A0H, 02CH;
  119. PROCEDURE [code] initZone 0A0H, 019H;
  120. PROCEDURE [nostkchk] InitZone*(pgrowZone: GrowZoneUPP; cmoreMasters: INTEGER; limitPtr: Ptr; startPtr: Ptr);
  121. BEGIN
  122.     SYSTEM.PUTREG(8, SYSTEM.ADR(startPtr)); 
  123.     initZone;
  124. END InitZone;
  125. PROCEDURE [code] SetZone*(hz: THz) 020H, 05FH, 0A0H, 01BH;
  126. PROCEDURE [code] CompactMem*(cbNeeded: Size): Size 020H, 01FH, 0A0H, 04CH, 02EH, 080H;
  127. PROCEDURE [code] CompactMemSys*(cbNeeded: Size): Size 020H, 01FH, 0A4H, 04CH, 02EH, 080H;
  128. PROCEDURE [code] PurgeMem*(cbNeeded: Size) 020H, 01FH, 0A0H, 04DH;
  129. PROCEDURE [code] PurgeMemSys*(cbNeeded: Size) 020H, 01FH, 0A4H, 04DH;
  130. PROCEDURE [code] FreeMem*(): LONGINT 0A0H, 01CH, 02EH, 080H;
  131. PROCEDURE [code] FreeMemSys*(): LONGINT 0A4H, 01CH, 02EH, 080H;
  132. PROCEDURE [code] ReserveMem*(cbNeeded: Size) 020H, 01FH, 0A0H, 040H;
  133. PROCEDURE [code] ReserveMemSys*(cbNeeded: Size) 020H, 01FH, 0A4H, 040H;
  134. PROCEDURE [code] MaxMem*(VAR grow: Size): Size 022H, 05FH, 0A1H, 01DH, 022H, 088H, 02EH, 080H;
  135. PROCEDURE [code] MaxMemSys*(VAR grow: Size): Size 022H, 05FH, 0A5H, 01DH, 022H, 088H, 02EH, 080H;
  136. PROCEDURE [code] SetGrowZone*(growZone: GrowZoneUPP) 020H, 05FH, 0A0H, 04BH;
  137. PROCEDURE [code] SetApplLimit*(zoneLimit: Ptr) 020H, 05FH, 0A0H, 02DH;
  138. PROCEDURE [code] MoveHHi*(h: Handle) 020H, 05FH, 0A0H, 064H;
  139. PROCEDURE [code] DisposePtr*(p: Ptr) 020H, 05FH, 0A0H, 01FH;
  140. PROCEDURE [code] getPtrSize 0A0H, 021H;
  141. PROCEDURE GetPtrSize*(p: Ptr): Size;
  142.     VAR res: LONGINT;
  143. BEGIN
  144.     SYSTEM.PUTREG(8, p);
  145.     getPtrSize;
  146.     SYSTEM.GETREG(0, res);
  147.     IF res < 0 THEN
  148.         RETURN 0
  149.     END;
  150.     RETURN res;
  151. END GetPtrSize;
  152. PROCEDURE [code] SetPtrSize*(p: Ptr; newSize: Size) 020H, 01FH, 020H, 05FH, 0A0H, 020H;
  153. PROCEDURE [code] DisposeHandle*(h: Handle) 020H, 05FH, 0A0H, 023H;
  154. PROCEDURE [code] SetHandleSize*(h: Handle; newSize: Size) 020H, 01FH, 020H, 05FH, 0A0H, 024H;
  155. PROCEDURE [code] getHandleSize 0A0H, 025H;
  156. PROCEDURE GetHandleSize*(h: Handle): Size;
  157.     VAR res: LONGINT;
  158. BEGIN
  159.     SYSTEM.PUTREG(8, h);
  160.     getHandleSize;
  161.     SYSTEM.GETREG(0, res);
  162.     IF res < 0 THEN
  163.         RETURN 0
  164.     END;
  165.     RETURN res;
  166. END GetHandleSize;
  167. PROCEDURE [code] ReallocateHandle*(h: Handle; byteCount: Size) 020H, 01FH, 020H, 05FH, 0A0H, 027H;
  168. PROCEDURE [code] EmptyHandle*(h: Handle) 020H, 05FH, 0A0H, 02BH;
  169. PROCEDURE [code] HSetRBit*(h: Handle) 020H, 05FH, 0A0H, 067H;
  170. PROCEDURE [code] HClrRBit*(h: Handle) 020H, 05FH, 0A0H, 068H;
  171. PROCEDURE [code] MoreMasters* 0A0H, 036H;
  172. PROCEDURE [code] BlockMove*(srcPtr: Ptr; destPtr: Ptr; byteCount: Size) 020H, 01FH, 022H, 05FH, 020H, 05FH, 0A0H, 02EH;
  173. PROCEDURE [code] BlockMoveData*(srcPtr: Ptr; destPtr: Ptr; byteCount: Size) 020H, 01FH, 022H, 05FH, 020H, 05FH, 0A2H, 02EH;
  174. PROCEDURE [code] purgeSpace 0A0H, 062H;
  175. PROCEDURE PurgeSpace*(VAR total: LONGINT; VAR contig: LONGINT);
  176. BEGIN
  177.     purgeSpace;
  178.     SYSTEM.GETREG(0, total);
  179.     SYSTEM.GETREG(8, contig)
  180. END PurgeSpace;
  181. PROCEDURE [code] HGetState*(h: Handle): SHORTINT 020H, 05FH, 0A0H, 069H, 01EH, 080H;
  182. PROCEDURE [code] HSetState*(h: Handle; flags: CHAR) 010H, 01FH, 020H, 05FH, 0A0H, 06AH;
  183. PROCEDURE [code] SetApplBase*(startPtr: Ptr) 020H, 05FH, 0A0H, 057H;
  184. PROCEDURE [code] MaxApplZone* 0A0H, 063H;
  185. PROCEDURE [code] HoldMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 000H, 0A0H, 05CH, 03EH, 080H;
  186. PROCEDURE [code] UnholdMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 001H, 0A0H, 05CH, 03EH, 080H;
  187. PROCEDURE [code] LockMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 002H, 0A0H, 05CH, 03EH, 080H;
  188. PROCEDURE [code] LockMemoryContiguous*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 004H, 0A0H, 05CH, 03EH, 080H;
  189. PROCEDURE [code] UnlockMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 003H, 0A0H, 05CH, 03EH, 080H;
  190. PROCEDURE [code] MemoryDispatchA0Result 0A1H, 05CH;
  191. PROCEDURE [nostkchk] GetPhysical*(VAR addresses: LogicalToPhysicalTable; VAR physicalEntryCount: LONGINT): MacTypes.OSErr;
  192. VAR res: MacTypes.OSErr;
  193. BEGIN
  194.     SYSTEM.PUTREG(0, LONG(LONG(00005H)));
  195.     SYSTEM.PUTREG(8, SYSTEM.ADR(addresses));
  196.     SYSTEM.PUTREG(9, physicalEntryCount);
  197.     MemoryDispatchA0Result;
  198.     SYSTEM.GETREG(0, res);
  199.     SYSTEM.GETREG(9, physicalEntryCount);
  200.     RETURN res
  201. END GetPhysical;
  202. PROCEDURE [code] DeferUserFn*(userFunction: UserFnUPP; argument: Ptr): MacTypes.OSErr 020H, 01FH, 020H, 05FH, 0A0H, 08FH, 03EH, 080H;
  203. PROCEDURE [code] DebuggerGetMax*(): LONGINT 070H, 000H, 0A0H, 08DH, 02EH, 080H;
  204. PROCEDURE [code] DebuggerEnter* 070H, 001H, 0A0H, 08DH;
  205. PROCEDURE [code] DebuggerExit* 070H, 002H, 0A0H, 08DH;
  206. PROCEDURE [code] DebuggerPoll* 070H, 003H, 0A0H, 08DH;
  207. PROCEDURE [code] GetPageState*(address: Ptr): PageState 020H, 05FH, 070H, 004H, 0A0H, 08DH, 03EH, 080H;
  208. PROCEDURE [code] PageFaultFatal*(): BOOLEAN 070H, 005H, 0A0H, 08DH, 01EH, 080H;
  209. PROCEDURE [code] DebuggerLockMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 006H, 0A0H, 08DH, 03EH, 080H;
  210. PROCEDURE [code] DebuggerUnlockMemory*(address: Ptr; count: LONGINT): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 070H, 007H, 0A0H, 08DH, 03EH, 080H;
  211. PROCEDURE [code] EnterSupervisorMode*(): StatusRegisterContents 070H, 008H, 0A0H, 08DH, 03EH, 080H;
  212. PROCEDURE [code] StripAddress*(theAddress: Ptr): Ptr 020H, 01FH, 0A0H, 055H, 02EH, 080H;
  213. PROCEDURE [code] Translate24To32*(addr24: Ptr): Ptr 020H, 01FH, 0A0H, 091H, 02EH, 080H;
  214. PROCEDURE [code] handToHand 0A9H, 0E1H;
  215. PROCEDURE [nostkchk] HandToHand*(VAR theHndl: Handle): MacTypes.OSErr;
  216. VAR res: MacTypes.OSErr;
  217. BEGIN
  218.     SYSTEM.PUTREG(8, theHndl);
  219.     handToHand;
  220.     SYSTEM.GETREG(0, res);
  221.     SYSTEM.GETREG(8, theHndl);
  222.     RETURN res
  223. END HandToHand;
  224. PROCEDURE [code] PtrToXHand*(srcPtr: Ptr; dstHndl: Handle; size: LONGINT): MacTypes.OSErr 020H, 01FH, 022H, 05FH, 020H, 05FH, 0A9H, 0E2H, 03EH, 080H;
  225. PROCEDURE [code] ptrToHand 0A9H, 0E3H;
  226. PROCEDURE [nostkchk] PtrToHand*(srcPtr: Ptr; VAR dstHndl: Handle; size: LONGINT): MacTypes.OSErr;
  227. VAR res: MacTypes.OSErr;
  228. BEGIN
  229.     SYSTEM.PUTREG(8, srcPtr);
  230.     SYSTEM.PUTREG(0, size);
  231.     ptrToHand;
  232.     SYSTEM.GETREG(0, res);
  233.     SYSTEM.GETREG(8, dstHndl);
  234.     RETURN res
  235. END PtrToHand;
  236. PROCEDURE [code] HandAndHand*(hand1: Handle; hand2: Handle): MacTypes.OSErr 022H, 05FH, 020H, 05FH, 0A9H, 0E4H, 03EH, 080H;
  237. PROCEDURE [code] PtrAndHand*(ptr1: Ptr; hand2: Handle; size: LONGINT): MacTypes.OSErr 020H, 01FH, 022H, 05FH, 020H, 05FH, 0A9H, 0EFH, 03EH, 080H;
  238. PROCEDURE [code] ApplicZone*(): THz 02EH, 0B8H, 002H, 0AAH;
  239. PROCEDURE [code] MFTempNewHandle*(logicalSize: Size; VAR resultCode: MacTypes.OSErr): Handle 03FH, 03CH, 000H, 01DH, 0A8H, 08FH;
  240. PROCEDURE [code] MFMaxMem*(VAR grow: Size): Size 03FH, 03CH, 000H, 015H, 0A8H, 08FH;
  241. PROCEDURE [code] MFFreeMem*(): LONGINT 03FH, 03CH, 000H, 018H, 0A8H, 08FH;
  242. PROCEDURE [code] MFTempHLock*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 01EH, 0A8H, 08FH;
  243. PROCEDURE [code] MFTempHUnlock*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 01FH, 0A8H, 08FH;
  244. PROCEDURE [code] MFTempDisposHandle*(h: Handle; VAR resultCode: MacTypes.OSErr) 03FH, 03CH, 000H, 020H, 0A8H, 08FH;
  245. PROCEDURE [code] MFTopMem*(): Ptr 03FH, 03CH, 000H, 016H, 0A8H, 08FH;
  246. PROCEDURE [code] ResrvMem*(cbNeeded: Size) 020H, 01FH, 0A0H, 040H;
  247. PROCEDURE [code] DisposPtr*(p: Ptr) 020H, 05FH, 0A0H, 01FH;
  248. PROCEDURE [code] DisposHandle*(h: Handle) 020H, 05FH, 0A0H, 023H;
  249. PROCEDURE [code] ReallocHandle*(h: Handle; byteCount: Size) 020H, 01FH, 020H, 05FH, 0A0H, 027H;
  250.  END MacMemoryMgr.
  251. TextControllers.StdCtrlDesc
  252. TextControllers.ControllerDesc
  253. Containers.ControllerDesc
  254. Controllers.ControllerDesc
  255. TextRulers.StdRulerDesc
  256. TextRulers.RulerDesc
  257. TextRulers.StdStyleDesc
  258. TextRulers.StyleDesc
  259. TextRulers.AttributesDesc
  260. Helvetica
  261. Documents.ControllerDesc
  262.